package main

import (
	"time"
	"fmt"
)

func main031() {

	//设置爆炸时间为1秒以后，定时器的计时在独立的协程中
	timer := time.NewTimer(1 * time.Second)
	fmt.Println(time.Now())

	////睡眠5秒的期间，定时器已经在其独立子协程中爆炸
	//time.Sleep(500*time.Millisecond)
	//fmt.Println(time.Now())

	//趁定时器未到时间,重置定时器的时间为3秒
	//如果已经超时,则重置无效
	//重置时间以当前时间为参照，而不是上一次设置的时间
	timer.Reset(3 * time.Second)
	fmt.Println("炸弹引爆于", <-timer.C)

}

func main() {

	timer := time.NewTimer(3 * time.Second)
	fmt.Println(time.Now(), "炸弹将于3秒后引爆")

	//趁定时器未到时间,将定时器终止
	timer.Stop()
	fmt.Println("炸弹已被拆除,定时器失效")

	//定时器已被叫停,其时间管道永远读不出数据了--死锁
	//fatal error: all goroutines are asleep - deadlock!
	t := <-timer.C
	fmt.Println("炸弹引爆于", t)
}
